package com.controller;

import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.Condition;
import com.constant.AuthConstant;
import com.exception.ErrorCode.ChargingErrorCode;
import com.service.ChongdianzhuangService;
import com.utils.RedisClient;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;

import com.domain.entity.DianzhuangleibieEntity;

import com.service.DianzhuangleibieService;
import com.utils.PageUtils;
import com.utils.R;

@RestController
@RequestMapping("/dianzhuangleibie")
public class DianzhuangleibieController {
    @Autowired
    private DianzhuangleibieService dianzhuangleibieService;

    @Autowired
    private RedisClient redisClient;

    @Autowired
    private ChongdianzhuangService chongdianzhuangService;

    /**
     * 管理员充电桩分类查询
     */
    @GetMapping("/page")
    public R page(@RequestParam int pageNum, @RequestParam int pageSize, DianzhuangleibieEntity dianzhuangleibie) {
        PageUtils page = dianzhuangleibieService.queryPage(pageNum, pageSize, dianzhuangleibie);

        return R.ok().put("data", page);
    }

    /**
     * 管理员充电桩详情
     */
    @GetMapping("/info/{id}")
    public R info(@PathVariable("id") Long id) {

        String json = redisClient.getString(AuthConstant.TYPE_INFO_PREFIX + id);
        if (StringUtils.isNotEmpty(json)) {
            DianzhuangleibieEntity entity = JSONObject.parseObject(json, DianzhuangleibieEntity.class);
            return R.ok().put("data", entity);
        }

        DianzhuangleibieEntity entity = dianzhuangleibieService.selectById(id);
        if (entity != null) {
            redisClient.setMinString(AuthConstant.TYPE_INFO_PREFIX + id, JSONObject.toJSONString(entity), 2000L);
        }

        return R.ok().put("data", entity);
    }

    /**
     * 管理员类别信息修改
     */
    @PostMapping("/update")
    public R update(@RequestBody DianzhuangleibieEntity dianzhuangleibie) {

        dianzhuangleibieService.updateById(dianzhuangleibie);
        return R.ok();
    }

    /**
     * 管理员类别信息删除
     */
    @PostMapping("/delete")
    public R delete(@RequestBody Long[] ids) {

        Set<String> typeInfo = new HashSet<>();
        AtomicInteger sumCount = new AtomicInteger();

        //先查询类别信息表来获取类别信息
        for (Long id : ids) {
            DianzhuangleibieEntity entity = dianzhuangleibieService.selectById(id);
            typeInfo.add(entity.getDianzhuangleibie());
        }

        typeInfo.forEach(e -> {
            int count = chongdianzhuangService.selectCount(new Condition().eq("dianzhuangleibie", e));
            sumCount.set(sumCount.get() + count);

        });

        if (sumCount.get() > 0) {
            return R.error(ChargingErrorCode.TYPE_CHARGING_IS_EXIST.getMessage());
        }

        dianzhuangleibieService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }

    /**
     * 管理员类别信息新增
     */
    @PostMapping("/save")
    public R save(@RequestBody DianzhuangleibieEntity dianzhuangleibie) {


        int count = dianzhuangleibieService.selectCount(new EntityWrapper<>(dianzhuangleibie)
                .eq("dianzhuangleibie", dianzhuangleibie.getDianzhuangleibie()));

        if (count > 0) {
            return R.error(ChargingErrorCode.TYPE_IS_EXIST.getMessage());
        }
        dianzhuangleibie.setId(new Date().getTime() + new Double(Math.floor(Math.random() * 1000)).longValue());

        dianzhuangleibieService.insert(dianzhuangleibie);
        return R.ok();
    }


}
